//
//  IsoScene.h
//  IsoCplus
//
//  Created by 周张林 on 15/9/15.
//
//

#ifndef __IsoCplus__IsoScene__
#define __IsoCplus__IsoScene__

#include "IsoObject.h"
#include "path/PathGrid.h"
#include "cocos2d.h"


class IsoScene:public IsoObject
{
    
private:
    
    //此场景所有的iso对象
    cocos2d::Vector<IsoObject *> _sprites;
    
    //格子数据
    PathGrid *_gridData;
    
    
public:
    
    static IsoScene* create(unsigned int size,unsigned int gridX,unsigned int gridZ);
    ~IsoScene();
    
    virtual bool init(unsigned int size,unsigned int gridX,unsigned int gridZ);
    
    /**
     *  设置此场景的格子数据
     *
     *  @param grid 格子数据源
     */
    void setGridData(PathGrid *grid);
    /**
     *  返回此场景的格子数据源
     *
     *  @return 格子数据源
     */
    PathGrid *getGridData() const;
    
    /**
     *  添加一个iso对象到此场景中
     *
     *  @param obj    iso对象
     *  @param isSort 是否进行深度排序
     */
    void addIsoObject(IsoObject *obj,bool isSort=true);
    
    /**
     *  移除一个iso对象
     *
     *  @param obj iso对象
     */
    void removeIsoObject(IsoObject *obj);
    
    /**
     *  对场景中一个iso对象进行深度排序
     *
     *  @param obj iso对象
     */
    void sortIsoObject(IsoObject *obj);
    
    /**
     *  对场景中所有的iso对象进行深度排序
     */
    void sortAll();
    
    /**
     *  通过格子坐标来获取此格子上的iso对象
     *
     *  @param nodeX
     *  @param nodeZ
     *
     *  @return iso对象
     */
    IsoObject* getIsoObjectByNodePos(int nodeX,int nodeZ);
    
    /**
     *  获取所有的iso对象数组
     *
     *  @return iso数组
     */
    const cocos2d::Vector<IsoObject *> &getIsoChildren() const;
    
    /**
     *  清除场景
     */
    void clearScene();
};

#endif /* defined(__IsoCplus__IsoScene__) */
